package controller;
import model.CommonContent;
import model.Item;
import model.Player;

import java.io.IOException;
import java.sql.SQLException;

public class UserInput {

    public static void dealInput(Player player, String inputMessage) throws IOException, SQLException {
        /*
         * 支持的指令：
         * l 或 look: 查看当前环境
         * use:使用物品
         * get:获取物品
         * throw:丢弃物品
         * quit: 退出游戏
         * e 或 east: 向东移动
         * w 或 west: 向西移动
         * s 或 south: 向南移动
         * n 或 north: 向北移动
         * ne 或 northeast: 向东北移动
         * nw 或 northwest: 向西北移动
         * se 或 southeast: 向东南移动
         * sw 或 southwest: 向西南移动
         * u 或 up: 向上移动
         * d 或 down: 向下移动
         * attack或a:攻击
         * help或h：帮助
         */

        // 将用户输入的字符串按空格分割成数组
        String[] inputs = inputMessage.split(" ");
        MessageController.showToPlayer(player, inputMessage);
        // 检查是否输入了 "l" 或 "look" 指令
        if (inputs[0].equals("l") || inputs[0].equals("look")) {
            // 如果仅输入了 "l" 或 "look" 且没有其他参数（inputs.length == 1），则直接返回（当前未实现具体逻辑）
            if (inputs.length == 1) {
                player.look("");
                return;
            }
            else {
                player.look(inputs[1]);
                return;
            }
        }
        if(inputs[0].equals("h") || inputs[0].equals("help")){
            String message = "l 或 look: 查看当前环境\n" +
                    "use:使用物品\n" +
                    "get:获取物品\n" +
                    "throw:丢弃物品\n"+
                    "quit: 退出游戏\n" +
                    "e 或 east: 向东移动\n" +
                    "w 或 west: 向西移动\n" +
                    "s 或 south: 向南移动\n" +
                    "n 或 north: 向北移动\n" +
                    "ne 或 northeast: 向东北移动\n" +
                    "nw 或 northwest: 向西北移动\n" +
                    "se 或 southeast: 向东南移动\n" +
                    "sw 或 southwest: 向西南移动\n" +
                    "u 或 up: 向上移动\n" +
                    "d 或 down: 向下移动\n" +
                    "attack或a:攻击\n"+
                    "help或h:帮助文档\n";
            MessageController.showToPlayer(player,message);
            return;
        }
        // 检查是否输入了 "quit" 指令，用于退出游戏
        if (inputs[0].equals("quit")) {
            player.quit();
            return;
        }

        if(inputs[0].equals("get")) {
            if(inputs.length == 2) {
                player.get(inputs[1]);
            }else {
                MessageController.showToPlayer(player,"请输入要使用的物品名。");
            }
            return;
        }

        if(inputs[0].equals("use")) {
            if(inputs.length == 2) {
                Item item=player.getItem(inputs[1]);
                if(item!=null) {
                    item.use(player);
                } else{
                    MessageController.showToPlayer(player,"没有此物品。");
                }

            }else {
                MessageController.showToPlayer(player,"请输入要使用的物品名。");
            }
            return;
        }
        if(inputs[0].equals("throw")) {
            if(inputs.length == 2) {
                player.throwthing(inputs[1]);
            }else {
                MessageController.showToPlayer(player,"请输入要丢弃的物品名");
            }
            return;
        }
        if(inputs[0].equals("a")||inputs[0].equals("attack")) {
            if(inputs.length == 2) {
                if(RoomController.getRoom(player.getLocation()).monsterExists(inputs[1])) {
                    FightController.attack(player,RoomController.getRoom(player.getLocation()).getMonster(inputs[1]));
                } else if (RoomController.getRoom(player.getLocation()).npcExist(inputs[1])) {
                    MessageController.showToPlayer(player,"目标非法。");
                } else if (RoomController.getRoom(player.getLocation()).playerExist(inputs[1])) {
                    FightController.attack(player,RoomController.getRoom(player.getLocation()).getPlayer(inputs[1]));
                }
            }
            else {
                MessageController.showToPlayer(player,"请输入攻击目标。");
            }
            return;
        }

        // 检查是否输入了方向移动指令
        if (inputs[0].equals("e") || inputs[0].equals("east")) {
            player.move(CommonContent.DIRECTION.EAST);
            return;
        }
        if (inputs[0].equals("w") || inputs[0].equals("west")) {
            player.move(CommonContent.DIRECTION.WEST);
            return;
        }
        if (inputs[0].equals("s") || inputs[0].equals("south")) {
            player.move(CommonContent.DIRECTION.SOUTH);
            return;
        }
        if (inputs[0].equals("n") || inputs[0].equals("north")) {
            player.move(CommonContent.DIRECTION.NORTH);
            return;
        }

        // 检查是否输入了斜向移动指令
        if (inputs[0].equals("ne") || inputs[0].equals("northeast")) {
            player.move(CommonContent.DIRECTION.NORTHEAST);
            return;
        }
        if (inputs[0].equals("nw") || inputs[0].equals("northwest")) {
            player.move(CommonContent.DIRECTION.NORTHWEST);
            return;
        }
        if (inputs[0].equals("se") || inputs[0].equals("southeast")) {
            player.move(CommonContent.DIRECTION.SOUTHEAST);
            return;
        }
        if (inputs[0].equals("sw") || inputs[0].equals("southwest")) {
            player.move(CommonContent.DIRECTION.SOUTHWEST);
            return;
        }

        // 检查是否输入了垂直方向移动指令
        if (inputs[0].equals("u") || inputs[0].equals("up")) {
            player.move(CommonContent.DIRECTION.UP);
            return;
        }
        if (inputs[0].equals("d") || inputs[0].equals("down")) {
            player.move(CommonContent.DIRECTION.DOWN);
            return;
        }
        MessageController.showToPlayer(player, "未知指令，请重新输入。");
    }
}
